package triangolo;
public class Triangle {
    private int base;
    private int latoC;
    private int beta;


    /**
     * Instanza un nuovo triangolo.
     * @param pBase La lunghezza base del triangolo.
     * @param pLatoC La lunghezza del lato all'estremo sinistro della base
     * @param pBeta L'angolo compreso tra il lato A (la base) e il lato C
     */
    public Triangle(int pBase, int pLatoC, int pBeta){
        this.setBase(pBase);
        this.setAngolo(pBeta);
        this.setLato(pLatoC);
    }

    /**
     * Setta la base del triangolo
     * @param pBase La lunghezza della base.
     * @return true se riesce ad assegnare, false in caso contrario.
     */
    public boolean setBase(int pBase){
        if(pBase>0){
            this.base=pBase;
            return true;
        }
        return false;
    }

    /**
     * Setta il lato B o il lato C del triangolo.
     * @param pLato La lunghezza del lato.
     * @param pCar La lettera che caratterizza il lato.
     * @return true se riesce ad assegnare, false in caso contrario.
     */
    public boolean setLato(int pLato){
        if(pLato>0){
                this.latoC=pLato;
            return true;
        }
        return false;
    }

    /**
     * Setta gli angoli Alfa e Beta
     * @param pAlfa L'ampiezza dell'angolo alfa.
     * @param pBeta L'ampiezza dell'angolo beta.
     * @return
     */
    public boolean setAngolo(int pBeta){
        if(pBeta<180){
            this.beta= pBeta;
            return true;
        }
        return false;
    }

     /**
     * Il valore dell'ampiezza di beta.
     * @return Un intero col valore dell'ampiezza di beta.
     */
    public int getBeta(){
        return this.beta;
    }

    /**
     * Il valore della lunghezza della base.
     * @return Un intero col valore della lunghezza della base.
     */
    public int getBase(){
        return this.base;
    }

    /**
     * Il valore di un lato a scelta tra B e C
     * @param pCar B o C a seconda del lato.
     * @return Un intero con valore della lunghezza di un lato.
     */
    public int getLato(){
        return this.latoC;
    }

    /**
     * Il valore dell'altezza del triangolo.
     * @return Un double col valore dell'altezza del triangolo.
     */
    public double getAltezza(){
        double altezza;
        altezza= (2*this.area())/this.base;
        return altezza;
    }

    /**
     * Il valore del perimetro del triangolo.
     * @return Un intero con il perimetro.
     */
    public double perimetro(){
        double perimetro=0;
        double trig= Math.pow(this.base, 2.0)+Math.pow(this.latoC, 2.0)-2*this.base*this.latoC*Math.cos(Math.toRadians(this.beta));
        double latoB=Math.sqrt(trig);
        perimetro=this.latoC+this.getBase()+latoB;
        return perimetro;
    }

    /**
     * Il valore dell'area del triangolo.
     * @return Un double col valore dell'area.
     */
    public double area(){
        double area=((this.base)*(this.latoC)*(Math.sin(Math.toRadians(this.beta))))/2;
        return area;
    }

    @Override
    public String toString(){
        return " "+this.beta+" "+this.base+" "+this.latoC+" "+this.area()+" "+this.getAltezza()+" "+this.perimetro();
    }
}
